
from rest_framework.viewsets import ModelViewSet
from meiduo_admin.serializers.order_serializers import *
from meiduo_admin.paginations import MyPage

class OrderViewSet(ModelViewSet):

    queryset = OrderInfo.objects.all()
    serializer_class = OrderSimpleModelSerializer
    pagination_class = MyPage

    def get_queryset(self):
        keyword = self.request.query_params.get('keyword')
        if keyword:
            return self.queryset.filter(order_id__contains=keyword)
        return self.queryset.all()

    def get_serializer_class(self):
        """
        功能：获取操作数据所使用的序列化器类
        :return: 序列化器类
        """
        # 判断接口请求是list还是retrieve
        # 问题焦点：如何判断接口请求处理的视图函数是list，还是retrieve?
        # 答：self.action属性 —— 该属性就是请求调用的视图函数名称
        # 1、如果接口请求是self.list函数，表明序列化返回列表数据 —— OrderSimpleModelSerializer
        if self.action == "list":
            return OrderSimpleModelSerializer
        # 2、如果接口请求是self.retrieve函数，表明序列化返回单一数据 —— OrderDetailModelSerializer
        elif self.action == "retrieve":
            return OrderDetailModelSerializer
        elif self.action == "partial_update":
            return OrderDetailModelSerializer
        else:
            return self.serializer_class

    # list函数里面使用OrderSimpleModelSerializer
    # def list(self, request, *args, **kwargs):

    # 默认使用的仍然是OrderSimpleModelSerializer
    # 应该使用OrderDetailModelSerializer
    # 问题焦点：一个视图集中，不同的视图函数，如何自定义使用不同的序列化器类？！
    # 答：重写self.get_serializer_class来实现
    # def retrieve(self, request, *args, **kwargs):